package com.hliushi.redis.task;

import com.hliushi.redis.config.Constants;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Random;

/**
 * @author llhuang10
 * @date 2021/8/14 21:03
 */
@Slf4j
@Component
public class InitService {

    @Resource
    private RedisTemplate redisTemplate;

    /**
     * 先初始化1个月的历史数据
     */
    public void init30day() {
        /**
         * bug点,
         * 错误写法
         * System.currentTimeMillis() / 1000 * 60 * 60;
         * 造成了数据精度不准确, 长度很长
         * 正确写法
         * System.currentTimeMillis() / (1000 * 60 * 60)
         * #
         * 10000 / 25 * 10 * 10 == 40000
         * 10000 / (25 * 10 * 10) => 10000 / 2500 = 4
         */
        long hour = System.currentTimeMillis() / (1000 * 60 * 60);

        ArrayList<Long> list = new ArrayList<>();
        // 初始化30天, 每天20个key
        for (int i = 1; i <= 24 * 30; i++) {
            // 倒退过去30天
            String key = Constants.HOUR_KEY + (hour - i);
            this.initMember(key);
        }
        log.info("30天数据初始化成功!");
    }


    /**
     * 初始化某个小时的key的score热度值
     *
     * @param key key
     */
    private void initMember(String key) {
        Random random = new Random();
        // 采用26个英文字母来代替帖子来实现排序, 随机为每个字段生成一个随机数作为score
        for (int i = 1; i <= 26; i++) {
            redisTemplate.opsForZSet().add(key, String.valueOf((char) (96 + i)), random.nextInt(30));
        }
    }
}
